from rest_framework.response import Response
from rest_framework.viewsets import ReadOnlyModelViewSet

from category.models import Category
from category.ser import CategorySer


# Create your views here.
class CategoryViewSet(ReadOnlyModelViewSet):
    """
    分类接口视图集（仅支持查询操作）
    提供分类树查询接口，供前端获取完整的多级分类数据
    继承 ReadOnlyModelViewSet，默认提供 list（列表查询）和 retrieve（单条查询）接口
    """
    # 查询集：仅查询已启用（is_active=1）的分类
    # 子分类通过序列化器的 children 字段递归查询，无需在此处关联
    def get_queryset(self):
        return Category.objects.filter(is_active=1)

    # 关联的序列化器（将查询集转换为树形结构数据）
    serializer_class = CategorySer

    def list(self, request, *args, **kwargs):
        """
        重写 list 方法（查询分类树列表）
        功能：返回一级分类 + 所有嵌套子分类的完整树形结构
        前端调用此接口后，可直接渲染左侧分类导航栏
        """
        # 调用父类 list 方法，获取 DRF Response 对象
        response = super().list(request, *args, **kwargs)
        return Response({
            "code": 200,
            "msg": "分类数据获取成功",
            "data": response.data
        })

    def retrieve(self, request, *args, **kwargs):
        """
        重写 retrieve 方法（查询单个分类详情）
        功能：返回指定分类的详情 + 其下所有子分类
        适用场景：前端需要单独获取某个分类及其子分类（如编辑分类时）
        """
        # 获取指定分类示例(通过URL中的pk参数)
        instance = self.get_object()
        # 序列化示例(包含子分类)
        serializer = self.get_serializer(instance)
        # 返回序列化后的数据
        return Response(serializer.data)
